#include <stdio.h>
const int MaxLen=100000;

//二分搜索 搜索最长的递增子序列使用
int erfen_search(int* array,int len,int searchValue){
    if(len==0)
    {
        return 0;
    }

    if(searchValue<=array[0])
    {
        return 0;
    }
    if(searchValue>array[len-1])
    {
        return len;
    }

    int st=0;
    int end=len-1;
    while (st<end-1)
    {
        int center=(st+end)/2;
        if(searchValue>array[center])
        {
            st=center;
        }
        else{
            end=center;
        }
    }
    return end;
}

//二分搜索 搜索最长的非递增子序列使用
int erfen_search2(int* array,int len,int searchValue){
    if(len==0)
    {
        return 0;
    }

    if(searchValue>array[0])
    {
        return 0;
    }
    if(searchValue<=array[len-1])
    {
        return len;
    }

    int st=0;
    int end=len-1;
    while (st<end-1)
    {
        int center=(st+end)/2;
        if(searchValue<=array[center])
        {
            st=center;
        }
        else{
            end=center;
        }
    }
    return end;
}

void initIntArray(int* array,int len)
{
    for(int i=0;i<len;i++)
    {
        array[i]=0;
    }
}

void printArray(int* array,int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%d ",array[i]);
    }
    printf("\n");
}

int main(){
    int shuru[MaxLen]={0};
    char ch;
    int len=0;
    int i=0;

    do
    {
        scanf("%d",&shuru[len]);
        len++;
        ch=getchar();
    }while(ch!='\n'&&ch!=EOF);// 这里用来判断是否输入了回车

    int* numArray=new int[len];

    initIntArray(numArray,len);
    int tmpLen=1;
    numArray[0]=shuru[0];
    //查找最长非递增子序列长度
    for(i=1;i<len;i++)
    {
        int value=shuru[i];
        int index=erfen_search2(numArray,tmpLen,value);
        if(index>=tmpLen)
        {
            numArray[tmpLen]=value;
            tmpLen++;
        }
        else{
            numArray[index]=value;
        }

        // printArray(numArray,tmpLen);
    }
    printf("%d\n",tmpLen);

    initIntArray(numArray,len);
    tmpLen=1;
    numArray[0]=shuru[0];
     //查找最长递增子序列长度
    for(i=1;i<len;i++)
    {
        int value=shuru[i];
        int index=erfen_search(numArray,tmpLen,value);
        if(index>=tmpLen)
        {
            numArray[tmpLen]=value;
            tmpLen++;
        }
        else{
            numArray[index]=value;
        }

        // printArray(numArray,tmpLen);
    }
    printf("%d\n",tmpLen);

    delete numArray;
}